package com.example.sprintboot.controller;

import com.example.sprintboot.common.Result;
import com.example.sprintboot.entity.Article;
import com.example.sprintboot.service.ArticeService;
import com.example.sprintboot.service.CategoryService;
import jakarta.annotation.Resource;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.io.IOException;
import java.util.List;
import java.util.UUID;

@RestController
@RequestMapping("/article")
public class ArticleController {
    @Resource
    private ArticeService articeService;
    
    @GetMapping("/selectAll")
    public Result article(){
       List<Article> list = articeService.selectAll();
        return Result.success(list);
    }
    
    @PostMapping("/add")
    public Result add(@RequestBody Article article){
        articeService.add(article);
        return Result.success();
    }

    /**
     * 上传文章图片
     * @param file 上传的图片文件
     * @return 返回图片的访问URL
     */
    @PostMapping("/upload/image")
    public Result uploadImage(@RequestParam("file") MultipartFile file) {
        // 1. 检查文件是否为空
        if (file.isEmpty()) {
            return Result.error("文件不能为空");
        }
        
        // 2. 检查文件类型（可选，增加安全性）
        String originalFilename = file.getOriginalFilename();
        if (originalFilename == null) {
            return Result.error("文件名不能为空");
        }
        
        String extension = originalFilename.substring(originalFilename.lastIndexOf(".")).toLowerCase();
        // 只允许图片格式
        if (!extension.matches("\\.(jpg|jpeg|png|gif|bmp|webp)")) {
            return Result.error("只支持图片格式：jpg, jpeg, png, gif, bmp, webp");
        }
        
        try {
            // 3. 生成新的文件名（使用UUID避免文件名冲突）
            String newFilename = UUID.randomUUID().toString() + extension;
            
            // 4. 设置文件保存路径（在项目根目录下的uploads文件夹）
            String uploadDir = System.getProperty("user.dir") + "/uploads/";
            File dir = new File(uploadDir);
            // 如果目录不存在，创建目录
            if (!dir.exists()) {
                dir.mkdirs();
            }
            
            // 5. 保存文件到服务器
            File destFile = new File(uploadDir + newFilename);
            file.transferTo(destFile);
            
            // 6. 生成访问URL（相对路径）
            String imageUrl = "/uploads/" + newFilename;
            
            // 7. 返回图片URL给前端
            return Result.success(imageUrl);
            
        } catch (IOException e) {
            e.printStackTrace();
            return Result.error("文件上传失败: " + e.getMessage());
        }
    }

}
